home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / LOM / LandOfMagic.AMOS / LandOfMagic.amosSourceCode < prev    next >
Encoding:
AMOS Source Code  |  2001-09-10  |  11.0 KB  |  441 lines

  1. ' *************************************
  2. ' *                                   *
  3. ' *        Land Of Magic V0.12        *
  4. ' *Story and Design by Marco Eberhardt*
  5. ' *      Written by Chris Hodges      *
  6. ' *     Graphics by Riccard Linde     *
  7. ' *Additional Gfx by Fredrik Johansson*
  8. ' *     Music by Fredrik Johansson    *
  9. ' *                                   *
  10. ' *************************************
  11. '
  12. ' The very slow routines like the anim checking and the
  13. ' anim invoking have now been placed into an extension 
  14. ' which has to be entered at slot 24.
  15. ' Not yet maximum speed... 
  16. '
  17. ' Try clicking on walls! ;-) 
  18. '
  19. ' Select flip page (1) or smooth scrolling (0)!
  20. FLIP=0
  21. ' Try TEST=2 
  22. TEST=2
  23. '  
  24. LOAFIL["Music/mod.wednesday",-3]
  25. LOAFIL["Graphics/AllGfx.ptl",10]
  26.  Extension_8_0A24 10
  27. LOAFIL["Graphics/AllGfx.pal",9]
  28. For A=0 To 31
  29.    Extension_8_14C6 0,A,Deek(Start(9)+A*2)
  30. Next 
  31. 'RIPGFX
  32. LOAFIL["Maps/Attributes.dat",11]
  33. LOAFIL["Maps/Animations.tan",12]
  34. Reserve As Work 20,10*1024
  35. ANBUF=Start(20) : Doke ANBUF,-1
  36. ARST=Start(11) : ANST=Start(12)
  37. MAPN=1 : Gosub LOAMAP
  38. Gosub INITSCREENS
  39. Gosub INITMAP
  40. If Length(3) Then Extension_8_10F2 0 : Extension_8_108E 3
  41. Fade 2 To 7
  42. MANA=0
  43. Do 
  44.   Screen Swap : Wait Vbl 
  45.   Bob Clear 
  46.   Add ANIRATE,1,0 To 4
  47.   Gosub CHECKFORTILEANIM
  48.   Gosub MOVEMAN
  49.   Bob 1,MX,MY,MAND*5+MANA/2+2
  50.   Bob Draw 
  51.   'Gosub OLDCHECKFORANIM 
  52.   If Mouse Key
  53.     NX=X Screen(X Mouse)/16+PAGX*MSX : NY=Y Screen(Y Mouse)/16+PAGY*MSY : Gosub INVTILE
  54.     While Mouse Key : Multi Wait : Wend 
  55.   End If 
  56.   MX=MANX-PAGX*MSX*16 : MY=MANY-PAGY*MSY*16
  57.   If FLIP=0
  58.     If MX<0 : Gosub GRIGHT : End If 
  59.     If MX=>MSX*16 : Gosub GLEFT : End If 
  60.     If MY<0 : Gosub GUP : End If 
  61.     If MY=>MSY*16 : Gosub GDOWN : End If 
  62.   Else 
  63.     If MX<0 or MX=>MSX*16 or MY<0 or MY=>MSY*16
  64.       Gosub GQUICK
  65.     End If 
  66.   End If 
  67.   Gosub CALCSCROLLMOVEMENT
  68.   Screen Offset 0,SOX,SOY
  69. Loop 
  70. End 
  71. CHECKFORACTION:
  72.   If ANIRATE=4 Then Return 
  73. '  Extension Y MAPST,MMX,MMY 
  74. Return 
  75.   OX=PAGX*MSX : OY=PAGY*MSY
  76.   For Y=OY To OY+MSY-1
  77.     MAD=MAPST+Y*MMX*4
  78.     For X=OX To OX+MSX-1
  79.       AR=Deek(MAD+X*4+2)
  80.       If AR and $8000 Then Plot(X-OX)*16,(Y-OY)*16,1
  81.     Next 
  82.   Next 
  83. Return 
  84. OLDCHECKFORANIM:
  85.   OX=PAGX*MSX : OY=PAGY*MSY
  86.   For Y=OY To OY+MSY-1
  87.     MAD=MAPST+Y*MMX*4
  88.     For X=OX To OX+MSX-1
  89.       AR=Deek(MAD+X*4+2)
  90.       INVO=(AR/16) and 7
  91.       If INVO>0 and(AR and $8000)
  92.         Gosub INVOKE : Doke MAD+X*4+2,AR and $7F8F
  93.       End If 
  94.     Next 
  95.   Next 
  96. Return 
  97. INVOKE:
  98. '  NX=X : NY=Y : Gosub INVTILE 
  99.   If INVO=1 or INVO=5 or INVO=7 Then NX=X : NY=Y-1 : Gosub INVTILE
  100.   If INVO=2 or INVO=5 or INVO=7 Then NX=X+1 : NY=Y : Gosub INVTILE
  101.   If INVO=3 or INVO=5 or INVO=7 Then NX=X : NY=Y+1 : Gosub INVTILE
  102.   If INVO=4 or INVO=5 or INVO=7 Then NX=X-1 : NY=Y : Gosub INVTILE
  103.   If INVO=6 or INVO=7
  104.     NX=X-1 : NY=Y-1 : Gosub INVTILE
  105.     NX=X+1 : NY=Y-1 : Gosub INVTILE
  106.     NX=X-1 : NY=Y+1 : Gosub INVTILE
  107.     NX=X+1 : NY=Y+1 : Gosub INVTILE
  108.   End If 
  109. Return 
  110. INVTILE:
  111.   If NX<0 or NX=>MMX or NY<0 or NY=>MMY Then Return 
  112.   AD=MAPST+(NY*MMX+NX)*4
  113.   Doke AD+2,Deek(AD+2) or $8000
  114. Return 
  115. CHECKFORTILEANIM:
  116.   OX=PAGX*MSX : OY=PAGY*MSY
  117.   'Extension Y OX,OY To MSX-1,MSY-1,ANBUF,Start(10)
  118.   If ANIRATE<>4 Then Doke ANBUF,-1 : Return 
  119.   AD=ANBUF
  120.   NX=MANX/16 : NY=MANY/16
  121.   MAD=MAPST+(NY*MMX+NX)*4
  122.   If Deek(MAD+2) and 8
  123.     P=Deek(ANST+Deek(MAD)*4+2)
  124.     If P
  125.       Doke MAD,P : Doke MAD+2,Deek(ARST+P*4) or $8000
  126.       Doke AD,NX-OX : Doke AD+2,NY-OY : Doke AD+4,P : Add AD,6
  127.     Else 
  128.       Doke MAD+2,Deek(ARST+Deek(MAD)*4)
  129.     End If 
  130.   End If 
  131.   'Extension Y MAPST,MMX,MMY,ANST,ARST,AD
  132.   'Extension Y OX,OY To MSX-1,MSY-1,ANBUF,Start(10)
  133. 'Return  
  134.   AD=ANBUF
  135.   While Extension_8_0BE4(AD)>-1
  136.     X=Deek(AD)-OX : Y=Deek(AD+2)-OY : P=Deek(AD+4) : Add AD,6
  137.     If X=>0 and Y=>0 and X<MSX and Y<MSY Then Extension_8_0A36 X,Y,P
  138.   Wend 
  139.   NX=MANX/16 : NY=MANY/16
  140.   MAD=MAPST+(NY*MMX+NX)*4
  141.   If Deek(MAD+2) and 8
  142.     P=Deek(ANST+Deek(MAD)*4+2)
  143.     If P
  144.       Doke MAD,P : Doke MAD+2,Deek(ARST+P*4) or $8000
  145.       Doke AD,NX-OX : Doke AD+2,NY-OY : Doke AD+4,P : Add AD,6
  146.        Extension_8_0A36 NX-OX,NY-OY,P
  147.     Else 
  148.       Doke MAD+2,Deek(ARST+Deek(MAD)*4)
  149.     End If 
  150.   End If 
  151.   For Y=0 To MSY-1
  152.     MAD=MAPST+((OY+Y)*MMX+OX)*4
  153.     For X=0 To MSX-1
  154.       T=Deek(MAD+X*4)*4
  155.       P=Deek(ANST+T)
  156.       AR=Deek(MAD+X*4+2)
  157.       If AR and $8000
  158.         If Deek(ANST+T+2)
  159.           P=Deek(ANST+T+2)
  160.         End If 
  161. '        If(X<>NX-OX) or(Y<>NY-OY) 
  162. '          Doke MAD+X*4+2,P and $7FFF
  163. '        End If  
  164.       End If 
  165.       If P
  166.         Doke MAD+X*4,P
  167.         AR=Deek(ARST+P*4)
  168.         If AR and 8
  169.           Doke MAD+X*4+2,AR or $8000
  170.         Else 
  171.           Doke MAD+X*4+2,AR
  172.         End If 
  173.         Doke AD,X : Doke AD+2,Y : Doke AD+4,P : Add AD,6
  174.          Extension_8_0A36 X,Y,P
  175.       End If 
  176.     Next 
  177.   Next 
  178.   Doke AD,-1
  179. Return 
  180. MOVEMAN:
  181.   DIX=Jleft(1)-Jright(1)
  182.   NX=(MANX+DIX*6)/16 : NY=(MANY-4)/16 : Gosub ACQUAR
  183.   If AR and 3 Then DIX=0
  184.   NX=(MANX+DIX*6)/16 : NY=(MANY+5)/16 : Gosub ACQUAR
  185.   If AR and 3 Then DIX=0
  186.   If DIX=0 Then DIY=Jup(1)-Jdown(1) Else DIY=0
  187.   NX=(MANX-4)/16 : NY=(MANY+DIY*6)/16 : Gosub ACQUAR
  188.   If AR and 3 Then DIY=0
  189.   NX=(MANX+5)/16 : NY=(MANY+DIY*6)/16 : Gosub ACQUAR
  190.   If AR and 3 Then DIY=0
  191.   MANX=Min(Max(MANX+DIX*2,0),MMX*16-1)
  192.   MANY=Min(Max(MANY+DIY*2,0),MMY*16-1)
  193.   If DIX<0 Then MAND=0
  194.   If DIX>0 Then MAND=1
  195.   If DIY<0 Then MAND=2
  196.   If DIY>0 Then MAND=3
  197.   If DIX or DIY Then Add MANA,1,0 To 9
  198. Return 
  199. ACQUAR:
  200.   If NX<0 or NX=>MMX or NY<0 or NY=>MMY Then AR=1 : Return 
  201. '  AR=Deek(ARST+Deek(MAPST+(NY*MMX+NX)*4)*4) 
  202.   AR=Deek(MAPST+(NY*MMX+NX)*4+2)
  203. Return 
  204. GQUICK:
  205.   Fade 1 : Wait 10
  206.   Bob Clear : Bob Off : Bob Draw : Wait Vbl : Screen Swap 
  207.   Bob Clear : Bob Draw : Wait Vbl : Screen Swap 
  208.   If MX<0 Then Dec PAGX
  209.   If MX=>MSX*16 Then Inc PAGX
  210.   If MY<0 Then Dec PAGY
  211.   If MY=>MSY*16 Then Inc PAGY
  212.   SCROFX=0 : SCROFY=0 : SOX=0 : SOY=0
  213.   Gosub INITMAP
  214.   Fade 1 To 7
  215. Return 
  216. GLEFT:
  217.   Bob Clear : Bob Off : Bob Draw : Wait Vbl : Screen Swap 
  218.   Bob Clear : Bob Draw : Wait Vbl : Screen Swap 
  219.   SOX=(MSX-DX)*16
  220.   BX=SOX/16 : BY=SOY/16
  221.   Wait Vbl 
  222.   Screen Copy 0,SOX,SOY,SOX+WX,SOY+WY To 0,0,SOY
  223.   OX=PAGX*MSX+BX : OY=PAGY*MSY
  224.   For Y=BY To MSY-1
  225.     For X=DX To 2*DX-1
  226.        Extension_8_0A36 X,Y,Deek(MAPST+((OY+Y)*MMX+X+OX)*4)
  227.     Next 
  228.   Next 
  229.   Wait Vbl 
  230.   Screen Offset 0,0,SOY
  231.   Wait Vbl 
  232.   Screen Swap 
  233.   Inc PAGX
  234.   SCROFX=0 : TX=WX+WX/10
  235.   Repeat 
  236.     Wait Vbl 
  237.     Gosub CALCSCROLLMOVEMENTX
  238.     Screen Offset 0,Min(SOX,WX),SOY
  239.   Until SOX>=WX
  240.   Wait Vbl 
  241.   Screen Offset 0,WX,SOY
  242.   Screen Copy 0,SOX,SOY,SOX+WX,SOY+WY To 0,0,SOY
  243.   SCROFX=0 : SOX=SCROFX
  244.   Gosub INITMAP
  245. Return 
  246. GRIGHT:
  247.   Bob Clear : Bob Off : Bob Draw : Wait Vbl : Screen Swap 
  248.   Bob Clear : Bob Draw : Wait Vbl : Screen Swap 
  249.   SOX=0
  250.   BX=SOX/16+MSX-DX : BY=SOY/16
  251.   Wait Vbl 
  252.   Screen Copy 0,SOX,SOY,SOX+WX,SOY+WY To 0,WX,SOY
  253.   Dec PAGX
  254.   OX=PAGX*MSX+BX : OY=PAGY*MSY
  255.   For Y=BY To MSY-1
  256.     For X=0 To DX-1
  257.        Extension_8_0A36 X,Y,Deek(MAPST+((OY+Y)*MMX+X+OX)*4)
  258.     Next 
  259.   Next 
  260.   Wait Vbl 
  261.   Screen Offset 0,WX,SOY
  262.   Wait Vbl 
  263.   Screen Swap 
  264.   SCROFX=WX*16 : TX=-WX/10
  265.   Repeat 
  266.     Wait Vbl 
  267.     Gosub CALCSCROLLMOVEMENTX
  268.     Screen Offset 0,Max(SOX,0),SOY
  269.   Until SOX<=0
  270.   Wait Vbl 
  271.   Screen Offset 0,0,SOY
  272.   SCROFX=(MSX-DX)*256 : SOX=SCROFX/16
  273.   Gosub INITMAP
  274. Return 
  275. GDOWN:
  276.   Bob Clear : Bob Off : Bob Draw : Wait Vbl : Screen Swap 
  277.   Bob Clear : Bob Draw : Wait Vbl : Screen Swap 
  278.   SOY=(MSY-DY)*16
  279.   BX=SOX/16 : BY=SOY/16
  280.   Wait Vbl 
  281.   Screen Copy 0,SOX,SOY,SOX+WX,SOY+WY To 0,SOX,0
  282.   OX=PAGX*MSX : OY=PAGY*MSY+BY
  283.   For Y=DY To 2*DY-1
  284.     For X=BX To MSX-1
  285.        Extension_8_0A36 X,Y,Deek(MAPST+((OY+Y)*MMX+X+OX)*4)
  286.     Next 
  287.   Next 
  288.   Wait Vbl 
  289.   Screen Offset 0,SOX,0
  290.   Wait Vbl 
  291.   Screen Swap 
  292.   Inc PAGY
  293.   SCROFY=0 : TY=WY+WY/10
  294.   Repeat 
  295.     Wait Vbl 
  296.     Gosub CALCSCROLLMOVEMENTY
  297.     Screen Offset 0,SOX,Min(SOY,WY)
  298.   Until SOY>=WY
  299.   Wait Vbl 
  300.   Screen Offset 0,SOX,WY
  301.   Screen Copy 0,SOX,SOY,SOX+WX,SOY+WY To 0,SOX,0
  302.   SCROFY=0 : SOY=0
  303.   Gosub INITMAP
  304. Return 
  305. GUP:
  306.   Bob Clear : Bob Off : Bob Draw : Wait Vbl : Screen Swap 
  307.   Bob Clear : Bob Draw : Wait Vbl : Screen Swap 
  308.   SOY=0
  309.   BX=SOX/16 : BY=SOY/16+MSY-DY
  310.   Wait Vbl 
  311.   Screen Copy 0,SOX,SOY,SOX+WX,SOY+WY To 0,SOX,WY
  312.   Dec PAGY
  313.   OX=PAGX*MSX : OY=PAGY*MSY+BY
  314.   For Y=0 To DY-1
  315.     For X=BX To MSX-1
  316.        Extension_8_0A36 X,Y,Deek(MAPST+((OY+Y)*MMX+X+OX)*4)
  317.     Next 
  318.   Next 
  319.   Wait Vbl 
  320.   Screen Offset 0,SOX,WY
  321.   Wait Vbl 
  322.   Screen Swap 
  323.   SCROFY=WY*16 : TY=-WY/10
  324.   Repeat 
  325.     Wait Vbl 
  326.     Gosub CALCSCROLLMOVEMENTY
  327.     Screen Offset 0,SOX,Max(SOY,0)
  328.   Until SOY<=0
  329.   Wait Vbl 
  330.   Screen Offset 0,SOX,0
  331.   SCROFY=(MSY-DY)*256 : SOY=SCROFY/16
  332.   Gosub INITMAP
  333. Return 
  334. CALCSCROLLMOVEMENT:
  335.   NSCROFX=Min(Max(MX-WX/2,0),MSX*16-WX)*16
  336.   NSCROFY=Min(Max(MY-WY/2,0),MSY*16-WY)*16
  337.   Add SCRSPX,(NSCROFX-SCROFX-SCRSPX*16)/16
  338.   Add SCRSPY,(NSCROFY-SCROFY-SCRSPY*16)/16
  339.   Add SCROFX,SCRSPX : Add SCROFY,SCRSPY
  340.   SOX=SCROFX/16 : SOY=SCROFY/16
  341. Return 
  342. CALCSCROLLMOVEMENTX:
  343.   Add SCRSPX,(TX*16-SCROFX-SCRSPX*16)/16
  344.   Add SCROFX,SCRSPX
  345.   SOX=SCROFX/16
  346. Return 
  347. CALCSCROLLMOVEMENTY:
  348.   Add SCRSPY,(TY*16-SCROFY-SCRSPY*16)/16
  349.   Add SCROFY,SCRSPY
  350.   SOY=SCROFY/16
  351. Return 
  352. INITSCREENS:
  353.   Screen Open 7,16,8,2,0 : Screen Hide 
  354.   Screen Open 0,640,352,32,0 : Screen Hide 
  355.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
  356.   WX=320 : WY=176+Ntsc*48
  357.   DX=WX/16 : DY=WY/16
  358.   Double Buffer : Autoback 0
  359.   Bob Update Off 
  360.   For A=0 To 31 : Colour A,0 : Next 
  361.   Screen Open 1,320,56,32,0 : Screen Hide 
  362.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
  363.   Screen Display 0,128,40+Ntsc*10,WX,WY
  364.   Screen Display 1,128,41+Ntsc*10+WY,320,56
  365.    Extension_8_149E 0,7
  366.    Extension_8_149E 0,1
  367.   Screen Show 0
  368.   Screen Show 1
  369.   Screen 0
  370. Return 
  371. INITMAP:
  372.   Doke ANBUF,-1
  373.   OX=PAGX*MSX : OY=PAGY*MSY
  374.   For Y=0 To MSY-1
  375.     For X=0 To MSX-1
  376.        Extension_8_0A36 X,Y,Deek(MAPST+((OY+Y)*MMX+X+OX)*4)
  377.     Next 
  378.   Next 
  379.   Wait Vbl 
  380.   Screen Offset 0,SOX,SOY
  381.   Wait Vbl 
  382.   Screen Swap 
  383.   Wait Vbl 
  384.   Screen Copy Physic(0) To Logic(0)
  385.   SCRSPX=0 : SCRSPY=0
  386.   MX=MANX-PAGX*MSX*16 : MY=MANY-PAGY*MSY*16
  387. Return 
  388. LOAMAP:
  389.   LOAFIL["Maps/"+ Extension_8_0EB8(MAPN,4)+".map",9]
  390.   ST=Start(9)
  391.   MAPST=Start(9)+256
  392.   MAPX=0 : MAPY=0
  393.   MMX=Deek(ST+4)
  394.   MMY=Deek(ST+6)
  395.   MSX=Deek(ST+8)*TEST
  396.   MSY=Deek(ST+10)*TEST
  397.   MANX=32 : MANY=32
  398.   PAGX=MANX/(MSX*16) : PAGY=MANY/(MSY*16)
  399.   AD=MAPST
  400.   For A=1 To MMX*MMY
  401.     P=Deek(AD+2)
  402.     If P and $8000
  403.       Doke AD+2,P and $7FFF
  404.     Else 
  405.       Doke AD+2,Deek(ARST+Deek(AD)*4) and $7F8F
  406.     End If 
  407.     Add AD,4
  408.   Next 
  409. Return 
  410. Procedure RIPGFX
  411.   Load Iff "Men&Weapons.iff",0
  412.   For A=0 To 31
  413.      Extension_8_14C6 1,A,Colour(A)
  414.   Next 
  415.    Extension_8_149E 0,0 : View 
  416.   For Y=0 To Screen Height-1
  417.     For X=0 To Screen Width-1
  418.        Extension_8_0388 X,Y, Extension_8_1504( Extension_8_14B6(1, Extension_8_039E(X,Y)))
  419.     Next 
  420.   Next 
  421.   For A=0 To 4
  422.     Get Bob A+2,A*17+1,5*17+1 To A*17+17,5*17+17
  423.   Next 
  424.   For A=6 To 10
  425.     Get Bob A+1,A*17+1,5*17+1 To A*17+17,5*17+17
  426.   Next 
  427.   For A=0 To 4
  428.     Get Bob A+12,A*17+1,6*17+1 To A*17+17,6*17+17
  429.   Next 
  430.   For A=6 To 10
  431.     Get Bob A+11,A*17+1,6*17+1 To A*17+17,6*17+17
  432.   Next 
  433.   For A=2 To 21
  434.     Hot Spot A,$11
  435.   Next 
  436.   Screen Close 0
  437. End Proc
  438. Procedure LOAFIL[FIL$,BNK]
  439.   If Exist(FIL$)=0 Then Dir$="LOM:"
  440.    Extension_8_0456 FIL$,BNK
  441. End Proc